// 1. 导入三方的网络请求工具库
import { useUserStore } from '@/stores/user'
import Request from 'luch-request'

// 配置白名单（接口地址）不需要携带Token
const whiteList = ['/login','/code','/login/password']

// 2. 创建一个请求实例对象
const request = new Request({
    // 配置基础路径
    baseURL: 'https://consult-api.itheima.net',
    custom: {
        loading: true
      }
})

// 3. 配置请求拦截器
request.interceptors.request.use((config) => { 

    // 3.0 统一携带token
    const store = useUserStore()
    if (store.user.token && !whiteList.includes(config.url!)) {
        config.header!.Authorization = `Bearer ${store.user.token}`
    }
    // 3.1 开启加载loading
    if (config.custom?.loading) {
        uni.showLoading({title:'正在加载中...',mask:true})
    }
    return config
  }, (error) => {
    return Promise.reject(error)
})
  
// 4. 配置响应拦截器
request.interceptors.response.use((res) => {
    // 4.0 关闭加载loading
    uni.hideLoading()
    // 4.1 处理请求成功，但业务失败
    if (res.data.code !== 10000) {
        uni.showToast({
            title: res.data.message,
            icon:'none'
        })
        return Promise.reject(res)
    }
   return res.data.data
}, (error) => {
    // 4.2 关闭加载loading
    uni.hideLoading()
    uni.showToast({
        title: error.data.message,
        icon:'none'
    })
    
    // 4.3 判断token失效
    if (error.statusCode === 401) {
        // 拦截到登录页面
        uni.redirectTo({url:'/pages/login/index'})
    }
    return Promise.reject(error)
})
  
// 5. 导出请求实例对象
export {request}